#include "head.h"

// 菜单信息 - 登陆用
const wchar_t *title = L"普通用户菜单";
const wchar_t *option_1[] = {L"登录", L"注册", L"返回"};

// 菜单信息 - 管理员用
const wchar_t *title_root = L"用户菜单";
const wchar_t *option_root[] = {
    L"设定航班",
    L"修改航班",
    L"修改普通用户",
    L"增加超级用户"};

// 菜单信息 - 普通用户用
const wchar_t *title_user = L"用户菜单";
const wchar_t *option_user[] = {
    L"购票退票",
    L"余额充值",
    L"查看航班",
    L"修改密码",
    L"我的订单"};

// 系统初始化
FlightSystem Sys_init(void)
{
    FlightSystem Flight_sys;
    Flight_sys.Flight_list = D_List_init();   // 航班信息
    Flight_sys.ADMIN_USER = S_List_init();    // 管理员账户信息
    Flight_sys.REGULAR_USER = S_List_init();  // 普通用户信息
    Flight_sys.SILVER_USER = S_List_init();   // 银卡会员信息 (9折)
    Flight_sys.GOLD_USER = S_List_init();     // 金卡会员信息 (8折)
    Flight_sys.PLATINUM_USER = S_List_init(); // 白金会员信息 (7折)

    // 从文件中导入数据
    D_List_file_scanf(Flight_sys.Flight_list);                  // 航班信息
    S_List_File_scanf(Flight_sys.ADMIN_USER, ADMIN_FILE);       // 管理员账户信息文件
    S_List_File_scanf(Flight_sys.REGULAR_USER, REGULAR_FILE);   // 普通用户信息文件
    S_List_File_scanf(Flight_sys.SILVER_USER, SILVER_FILE);     // 银卡会员信息文件 (9折)
    S_List_File_scanf(Flight_sys.GOLD_USER, GOLD_FILE);         // 金卡会员信息文件 (8折)
    S_List_File_scanf(Flight_sys.PLATINUM_USER, PLATINUM_FILE); // 白金会员信息文件 (7折)

    system("clear");
    return Flight_sys;
}

// 系统登录
U_data* Sys_log_in(FlightSystem Flight_sys)
{
    // 用户信息合表
    U_list *list = S_List_init();
    list = S_List_merge(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
    list = S_List_merge(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = S_List_merge(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = S_List_merge(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = S_List_merge(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)

    // 开始登录
    U_data* log_data = Log_in(list);
    // log_data.ticket_num = 0;
    return log_data;
}

// 查看航班
//  D_List_print(Flight_list);
// 购票
void Buy_ticket(F_list *Flight_list, U_data *log_data)
{
    int num = 0;
    printf("请输入要购买的班次:");
    scanf("%d", &num);
    F_node *ptr = Flight_list->next;
    // 找到对应班次
    for (int i = 1; i < num; i++)
    {
        printf("111\n");
        ptr = ptr->next;
    }
    // 判断航班票的数量是否为空
    if (ptr->data.leftbuyersa != 0)
    { // 判断用户余额是否能够买票
        printf("222\n");
        if (log_data->value > ptr->data.value)
        {
            printf("333\n");
            // 用户航班信息增加
            log_data->ticket_num++;
            // 票量减一
            ptr->data.leftbuyersa--;
            // 从余额中扣除票价
            log_data->value = log_data->value - ptr->data.value;
            // 航班信息存入用户信息中
            log_data->ticket[log_data->ticket_num - 1] = ptr->data;
            system("clear");
            printf("您购买的航班信息如下：\n");
            printf("班次    机型        起点站  终点站  起飞时间    到达时间    飞行时间    票价  载客量  剩余座位  是否飞\n");
            printf("--------------------------------------------------------------------------------------------------\n");
            printf("%-6d", ptr->data.id);
            printf("%-15s", ptr->data.flighttype);
            printf("%-10s", ptr->data.startcity);
            printf("%-10s", ptr->data.arrivecity);
            printf("%02d:%02d\t", ptr->data.starttime[0], ptr->data.starttime[1]);
            printf("%02d:%02d\t    ", ptr->data.arrivetime[0], ptr->data.arrivetime[1]);
            printf("%-10s\t", ptr->data.flytime);
            printf("%-6d", ptr->data.value);
            printf("%-8d", ptr->data.maxNUM);
            printf("%-8d  ", ptr->data.leftbuyersa);
            printf("%c\n", ptr->data.whetherfly);
            return ;
        }
        else
        {
            printf("余额不足，请充值后在购买！");
            return ;
        }
    }
    else
    {
        printf("此航班票以及售空！");
        return ;
    }
}
// 退票
void Refund_ticket(F_list *Flight_list, U_data *log_data)
{
    F_node *ptr = Flight_list->next;
    // 判断用户购票数量不为0
    if (log_data->ticket_num > 0)
    {
        int num = 0;
        printf("请输入待退票的航班班次：");
        scanf("%d", &num);
        // 遍历购买的所有航班（用于判断是否购买了要退掉的航班）
        for (int i = 0; i < log_data->ticket_num; i++)
        {

            // 判断是否买了这一趟航班
            if (num == log_data->ticket[i].id)
            { // 删除用户此次航班信息如果就一张票
                if (log_data->ticket_num == 1)
                {
                    // 票数量加一
                    ptr->data.leftbuyersa++;
                    // 退还用户买票的钱
                    log_data->value = log_data->value + ptr->data.value;
                    log_data->ticket_num = 0;
                    return ;
                }
                // 票数量加一
                ptr->data.leftbuyersa++;
                // 退还用户买票的钱
                log_data->value = log_data->value + ptr->data.value;

                // 删除此次航班
                for (int j = i; j + 1 < log_data->ticket_num; j++)
                {
                    log_data->ticket[j] = log_data->ticket[j + 1];
                }
                // 票的数量减一
                log_data->ticket_num--;
                return ;
            }
            ptr = ptr->next;
        }

        printf("您没有购买这一趟航班\n");
    }
    else
    {
        printf("您没有购买票，不能进行退票操作！");
        return ;
    }
}
//查看用户信息
void look_information(U_data *user_data)
{
    printf("账号：%s\t密码:%s\t等级:%d\t余额:%d\t数量:%d\n",
           user_data->name, user_data->passwd, user_data->grade, user_data->value, user_data->ticket_num);
    for (int i = 0; i < user_data->ticket_num; i++)
    {
        printf("班次    机型        起点站  终点站  起飞时间    到达时间    飞行时间    票价  载客量  剩余座位  是否飞\n");
        printf("--------------------------------------------------------------------------------------------------\n");
        printf("%-6d", user_data->ticket[i].id);
        printf("%-15s", user_data->ticket[i].flighttype);
        printf("%-10s", user_data->ticket[i].startcity);
        printf("%-10s", user_data->ticket[i].arrivecity);
        printf("%02d:%02d\t", user_data->ticket[i].starttime[0], user_data->ticket[i].starttime[1]);
        printf("%02d:%02d\t    ", user_data->ticket[i].arrivetime[0], user_data->ticket[i].arrivetime[1]);
        printf("%-10s\t", user_data->ticket[i].flytime);
        printf("%-6d", user_data->ticket[i].value);
        printf("%-8d", user_data->ticket[i].maxNUM);
        printf("%-8d  ", user_data->ticket[i].leftbuyersa);
        printf("%c\n", user_data->ticket[i].whetherfly);
        printf("\n");
    }
}

// 系统菜单
void Sys_menu(F_list *Flight_list, FlightSystem Flight_Sys, U_data log_data)
{
    // 分支
    int flag = 0;
    switch (log_data.grade)
    {
    case 1:
        // 管理员功能界面
        printf("欢迎管理员用户登陆\n");
        flag = display_menu(title_root, option_root, 4);
        break;
    default:
        // 普通用户功能界面
        printf("欢迎普通用户登陆\n");
        flag = display_menu(title_user, option_user, 5) + 4;
        break;
    }

    // 菜单选项分支处理
    switch (flag)
    {
    case 1:
        // 管理员 - 设定航班
        break;
    case 2:
        // 管理员 - 修改航班
        break;
    case 3:
        // 管理员 - 修改普通用户
        break;
    case 4:
        // 管理员 - 增加超级用户
        break;
    case 5:
        // 用户 - 购票退票
        break;
    case 6:
        // 用户 - 余额充值
        break;
    case 7:
        //查看航班
        D_List_print(Flight_Sys.Flight_list);
        break;
    case 8:
        // 用户 - 修改密码
        break;
    case 9:
        // 用户 - 我的订单
        break;
    default:
        break;
    }
}
